package com.sunday.common.mq.rabbit.study.spring.study.e3_Receiving_Messages;

import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 元注释
 * 有时，您可能希望对多个侦听器使用相同的配置。 若要减少样板配置，可以使用元注释创建自己的侦听器注释。 以下示例演示如何执行此操作：
 */
public class MetaListener {

    @MyAnonFanoutListener
    public void handle1(String foo) {

    }

    @MyAnonFanoutListener
    public void handle2(String foo) {

    }

    @Target({ElementType.TYPE, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue,
            exchange = @Exchange(value = "metaFanout", type = ExchangeTypes.FANOUT)))
    public @interface MyAnonFanoutListener {
    }

}